home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Compass
/
Compass - Issue 1 (1994)(Alcatraz).adf
/
SOURCE
/
AGA_StartUp.s
next >
Wrap
Text File
|
1992-09-02
|
4KB
|
209 lines
; Graz, February 1994
*** StartUp by POSEIDON of ALCATRAZ ***
*** Thanks to MIKE of SPREADPOINT ***
*** Works on A500 upto A4000/40 ***
*** Written using DEVPAC ***
Include CustomRegisterAGA.s
*** Exec ***
LVO_SuperVisor=-30
FindTask=-294
GetMsg=-372
WaitPort=-384
LVO_OldOpenLibrary=-408
LVO_CloseLibrary=-414
*** Grafics ***
ActiView=34
CopInit =38
LVO_LoadView=-222
LVO_WaitTOF=-270
*** Use this const. for center your screen correct ***
SCR_X=40 PlaneWidth in bytes ( must be a multiple of 4 )
SCR_Y=256 PlaneHeight in lines ( must be multiple of 2 )
PLN=4 # of Planes
*** Writing this const. in the same named registers ***
DIW_START=($29-(SCR_Y-256)/2)*256+$81-(SCR_X*8-320)/2
DIW_STOP=($29+(SCR_Y-256)/2)*256+$c1+(SCR_X*8-320)/2
DDF_START=((($81-(SCR_X*8-320)/2)-17)/2)&$fff8
DDF_STOP=DDF_START+(SCR_X*4-8)
*** This const. gives you the first line of your screen ***
*** very useful for Copper Wait ***
COP0=$29-(SCR_Y-256)/2
*** Some often used macros ***
*** OpenLibrary Name,Base,Error ***
M_OpenLib MACRO
move.l 4.w,a6
lea \1,a1
jsr LVO_OldOpenLibrary(a6)
move.l d0,\2
beq \3
ENDM
*** CloseLibrary Base ***
M_CloseLib MACRO
move.l 4.w,a6
move.l \1,a1
jsr LVO_CloseLibrary(a6)
ENDM
*** Try to use Sections for Code and Datas, so there
*** will never be any problem with the cache !!!
Section Programm,CODE
Start move.l 4.w,a6 WB-startup ( no fucking GURU !!! )
sub.l a1,a1
jsr FindTask(a6)
move.l d0,a4
tst.l $ac(a4)
bne.s fromCLI
lea $5c(a4),a0 get WorkbenchMessage
jsr WaitPort(a6)
lea $5c(a4),a0
jsr GetMsg(a6)
fromCLI M_OpenLib GfxName,GfxBase,Err
move.l GfxBase,a6 store old view
move.l ActiView(a6),OldView
move.l #0,a1 set view to default
jsr LVO_LoadView(a6)
jsr LVO_WaitTOF(a6)
jsr LVO_WaitTOF(a6)
lea $dff000,a5
move.w #$7fff,d0
move.w INTENAR(a5),-(a7) clear all interrupts
or.w #$8000,(a7)
move.w d0,INTENA(a5)
move.w INTREQR(a5),-(a7)
or.w #$8000,(a7)
move.w d0,INTREQ(a5)
move.w DMACONR(a5),-(a7) clear all DMA channels
or.w #$8000,(a7)
move.w d0,DMACON(a5)
clr.l MyVBR use VBR register
move.l 4.w,a6
move.w 296(a6),d0
btst #0,d0 if 60010 or higher processor
beq.s noVBR
lea SuperV,a5 goto supervisormode
jsr LVO_SuperVisor(a6)
bra.s noVBR
SuperV movec VBR,d0 and get VBR register
move.l d0,MyVBR
rte
noVBR lea $dff000,a5
cmp.b #$fc,LISAID(a5) test AGA
bne.s NotAGA
move.w #$c00,BPLCON3(a5) reset new BPLCON register to default
clr.w FMODE(a5) reset fetchmode to 16 bit
NotAGA bsr.w InitInterrupt
*** Init. here your CopperList ***
lea $dff000,a5
move.l #NewCopperList,COP1LCH(a5) init. new CopperList
clr.w COPJMP1(a5)
move.w #DIW_START,DIWSTRT(a5) set DisplayWindow
move.w #DIW_STOP,DIWSTOP(a5)
move.w #DDF_START,DDFSTRT(a5) set DataFetch
move.w #DDF_STOP,DDFSTOP(a5)
move.w #PLN*$1000+$200,BPLCON0(a5) init. BitPlaneControl
clr.l BPLCON1(a5)
move.w #$c020,INTENA(a5) switch on e.g. Level3Interrupt
move.w #$83c0,DMACON(a5) ???
Main
*** Insert here your MainProgramm ***
btst #6,$bfe001
bne.s Main
Exit bsr.w DeinitInterrupt
lea $dff000,a5
move.w (a7)+,DMACON(a5) restore DMA
move.w (a7)+,INTREQ(a5) restore interrupts
move.w (a7)+,INTENA(a5)
move.l GfxBase,a6 restore view
move.l OldView,a1
jsr LVO_LoadView(a6)
jsr LVO_WaitTOF(a6)
jsr LVO_WaitTOF(a6)
move.l CopInit(a6),COP1LCH(a5)
M_CloseLib GfxBase
Err moveq #0,d0
rts
*** Use the VBR !!! e.g. Level3Interrupt ***
InitInterrupt
move.l MyVBR,a0
move.l $6c(a0),OldInt
move.l #NewInterrupt,$6c(a0)
rts
DeinitInterrupt
move.l MyVBR,a0
move.l OldInt,$6c(a0)
rts
NewInterrupt
movem.l d0-d7/a0-a6,-(sp)
*** Insert here your own Interrupt routine ***
movem.l (sp)+,d0-d7/a0-a6
move.w #$0020,INTREQ+$dff000
rte
*** Remeber the cache !?! ***
Section Variables,DATA
GfxName dc.b "graphics.library",0
even
GfxBase dc.l 0
OldView dc.l 0
MyVBR dc.l 0
OldInt dc.l 0
*** Sections for ChipMemory ***
Section GFX,DATA_C
NewCopperList
dc.l -2 create your own copperlist
Section PLANES&BUFFER,BSS_C
Plane ds.b SCR_X*SCR_Y*PLN